//
//  Singleton.h
//  aiyu_2
//
//  Created by ibokan on 14-10-14.
//  Copyright (c) 2014年 ibokan. All rights reserved.
//

#define singleton_interface(className)\
+(className *)shared##className;



#define singleton_implementation(className) \
static className *_instance; \
+ (id)allocWithZone:(NSZone *)zone \
{ \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
_instance = [super allocWithZone:zone]; \
}); \
return _instance; \
} \
+ (className *)shared##className \
{ \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
_instance = [[self alloc] init]; \
}); \
return _instance; \
}